package {
	
	import br.com.damazzy.manterPessoa.PessoaEdicao;
	import br.com.damazzy.manterPessoa.PessoaSelecaoView;
	import br.com.damazzy.util.TratamentoErros;
	import br.com.damazzy.vo.PessoaVO;
	
	import flash.events.Event;
	import flash.events.MouseEvent;
	
	import mx.collections.ArrayCollection;
	import mx.controls.Alert;
	import mx.events.CloseEvent;
	import mx.events.FlexEvent;
	import mx.managers.PopUpManager;
	import mx.rpc.events.FaultEvent;
	import mx.rpc.events.ResultEvent;
	
	public class PessoaSelecao extends PessoaSelecaoView {
		
		private var pessoaEdicao: PessoaEdicao;
		private var listaPessoas: ArrayCollection = new ArrayCollection();
		private var listaUfs: ArrayCollection;
		private var listaStatus: ArrayCollection;
		
		public function PessoaSelecao() {
			super();
			
			this.addEventListener(FlexEvent.CREATION_COMPLETE, init);
			
			include 'br/com/damazzy/util/RegistroVOs.as';
		}
		
		private function init(event: FlexEvent): void {
			
			btnPesquisar.addEventListener(MouseEvent.CLICK, pesquisar);
			btnVisualizar.addEventListener(MouseEvent.CLICK, visualizar);
			grdPessoas.addEventListener(MouseEvent.DOUBLE_CLICK, visualizar);
			btnIncluir.addEventListener(MouseEvent.CLICK, incluir);
			btnAlterar.addEventListener(MouseEvent.CLICK, alterar);
			btnExcluir.addEventListener(MouseEvent.CLICK, alertaExcluir);
			btnFechar.addEventListener(MouseEvent.CLICK, fechar);
			this.addEventListener(CloseEvent.CLOSE, fechar);
			
			rm.obterDadosSelecao.addEventListener(ResultEvent.RESULT, resultObterDadosSelecao);
			rm.obterDadosSelecao.addEventListener(FaultEvent.FAULT, TratamentoErros.fault);
			rm.pesquisar.addEventListener(ResultEvent.RESULT, resultPesquisar);
			rm.pesquisar.addEventListener(FaultEvent.FAULT, TratamentoErros.fault);
			rm.excluir.addEventListener(ResultEvent.RESULT, resultExcluir);
			rm.excluir.addEventListener(FaultEvent.FAULT, TratamentoErros.fault);
			
			limparDados();
			
			rm.obterDadosSelecao();
		}
		
		private function resultObterDadosSelecao(event: ResultEvent): void {
			listaUfs = event.result.dados.listaUfs;
			
			var objUf: PessoaVO = new PessoaVO();
			objUf.codUf = "---";
			
			listaUfs.addItemAt(objUf, 0);
			
			cbxUf.dataProvider = listaUfs;
			
			criarComboStatus();
		}
		
		private function criarComboStatus(): void {
			listaStatus = new ArrayCollection();
			
			var objStatus: PessoaVO = new PessoaVO();
			objStatus.status = "---";
			listaStatus.addItemAt(objStatus, 0);
			
			var objStatusAtivo: PessoaVO = new PessoaVO();
			objStatusAtivo.status = "ATIVO";
			objStatusAtivo.bolAtivo = "true";
			listaStatus.addItemAt(objStatusAtivo, 1);
			
			var objStatusInativo: PessoaVO = new PessoaVO();
			objStatusInativo.status = "INATIVO";
			objStatusInativo.bolAtivo = "false";
			listaStatus.addItemAt(objStatusInativo, 2);
			
			cbxStatus.dataProvider = listaStatus;
		}
		
		public function pesquisar(event: MouseEvent = null): void {
			
			var pessoa: PessoaVO = new PessoaVO();
			pessoa.nome = txtNome.actualText == "" ? null : txtNome.actualText;
			pessoa.endereco = txtEndereco.actualText == "" ? null : txtEndereco.actualText;
			pessoa.cep = txtCep.actualText == "" ? null : txtCep.actualText;
			pessoa.telefone = txtTelefone.actualText == "" ? null : txtTelefone.actualText;
			pessoa.cidade = txtCidade.actualText == "" ? null : txtCidade.actualText;
			pessoa.codUf = cbxUf.selectedIndex == 0 ? null : cbxUf.selectedItem.codUf;
			
			pessoa.bolPessoaFisica = rdTipoPessoa.selectedValue != null ? rdTipoPessoa.selectedValue.toString() : null;
			
			if (cbxStatus.selectedIndex != 0) {
				pessoa.bolAtivo = cbxStatus.selectedItem.bolAtivo;
			}
			
			if (dtNascimento.selectedDate != null) {
				pessoa.dataNascimento = dtNascimento.dataFormatada;	
			}
			
			rm.pesquisar(pessoa);
		}
		
		private function resultPesquisar(event: ResultEvent): void {
			listaPessoas = event.result.dados.lista;
			grdPessoas.dataProvider = listaPessoas;
			
			if (listaPessoas.length == 0) {
				Alert.show("Nenhuma pessoa encontrada com o filtro informado.", "Aviso!");
			}
		}
		
		private function visualizar(event: Event): void {
			
			if (grdPessoas.selectedItem != null) {
				
				pessoaEdicao = new PessoaEdicao(grdPessoas.selectedItem as PessoaVO, false, null);
				pessoaEdicao.telaPai = this;
				pessoaEdicao.visualizarDados = true;
				PopUpManager.addPopUp(pessoaEdicao, this, true);
				PopUpManager.centerPopUp(pessoaEdicao);
				
			} else {
				Alert.show("Selecione uma pessoa na lista para visualizar.", "Aviso!");
			}
		}
		
		private function incluir(event: MouseEvent): void {
			pessoaEdicao = new PessoaEdicao(null, false, null);
			pessoaEdicao.telaPai = this;
			PopUpManager.addPopUp(pessoaEdicao, this, true);
			PopUpManager.centerPopUp(pessoaEdicao);
		}
		
		private function alterar(event: MouseEvent): void {
			
			if (grdPessoas.selectedItem != null) {
				
				pessoaEdicao = new PessoaEdicao(grdPessoas.selectedItem as PessoaVO, false, null);
				pessoaEdicao.telaPai = this;
				PopUpManager.addPopUp(pessoaEdicao, this, true);
				PopUpManager.centerPopUp(pessoaEdicao);
				
			} else {
				Alert.show("Selecione uma pessoa na lista para alterar.", "Aviso!");
			}
		}
        
        private function alertaExcluir(event: MouseEvent): void {
			if (grdPessoas.selectedItem != null) {
				Alert.yesLabel = "Sim";
                Alert.noLabel = "Não";
				Alert.show("Deseja realmente excluir a pessoa selecionada?", "Exclusão", 1|2, this, excluir);
			} else {
				Alert.show("Selecione uma pessoa na lista e clique em excluir.", "Aviso!");
			}
		}
		
		private function excluir(event: CloseEvent): void {
			if (event.detail == Alert.YES) {
				var pessoaExcluida: PessoaVO = grdPessoas.selectedItem as PessoaVO;
				rm.excluir(pessoaExcluida);
			}
		}
		
		private function resultExcluir(result: ResultEvent): void {
			Alert.show("Pessoa excluída com sucesso.", "Aviso!");
			pesquisar();
		}
		
		private function fechar(event: Event): void {
			PopUpManager.removePopUp(this);
		}
		
		private function limparDados(): void {
			txtNome.actualText = "";
			txtEndereco.actualText = "";
			txtCep.actualText = "";
			txtTelefone.actualText = "";
			txtCidade.actualText = "";
			cbxUf.selectedIndex = 0;
			cbxStatus.selectedIndex = 0;
			rdTipoPessoa.selectedValue = null;
			dtNascimento.selectedDate = null;
			
			grdPessoas.dataProvider = null;
		}
	}
}